package com.baizhi.mall.service.impl;

import com.baizhi.mall.mapper.MenuDao;
import com.baizhi.mall.service.MenuService;
import com.baizhi.mall.entity.mysql.Menu;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.stream.Collectors;

@Service
@Transactional
public class MenuServiceImpl implements MenuService {
    @Autowired
    private MenuDao md;
    @Override
    @Transactional(readOnly = true)
    public List<Menu> selectAll() {
        List<Menu> list=md.selectAll();
        return list;
    }

    private List<Menu> getChildrenMenu(Integer parentId,List<Menu> menus){
        return menus.stream()
                .filter(menu->menu.getPid()==parentId)//过滤出想要查询的子菜单。
                //给当前的菜单的children属性赋值
                .peek(menu -> menu.setChildren(getChildrenMenu(menu.getId(),menus)))
                //递归调用，当过滤后没有子菜单了程序就结束了。
                .collect(Collectors.toList());
    }
    @Override
    public List<Menu> selectAllPermission() {
        List<Menu> menus=md.selectList(null);//简单地从数据库把数据全部查询出来，查出所有菜单，包括1级，2级和三级
        List<Menu> collect=menus.stream()
                //过滤一级分类信息
                .filter((menu) -> menu.getType()==0)//过滤出一级分类信息
                .peek((menu) -> menu.setChildren(getChildrenMenu(menu.getId(),menus)))//同时给一级分类的children属性赋值
                .collect(Collectors.toList());
        return collect;
    }

    @Override
    public List<Menu> selectPermissionByUsername(String username) {
        List<Menu> menus =md.selectPermissionByUsername(username);
        List<Menu> collect=menus.stream()
                .filter((menu) -> menu.getType()==0)//过滤出一级分类信息
                .peek((menu) ->menu.setChildren(getChildrenMenu(menu.getId(),menus)))//同时给一级分类的children属性赋值。
                .collect(Collectors.toList());
        return null;
    }

    @Override
    public List<Menu> selectPermissionByUsername2(String username) {
        List<Menu> menus =md.selectPermissionByUsername(username);
        return menus;
    }
}
